import requests
import pandas as pd
import os

# 高德地图API请求URL
api_url = "https://restapi.amap.com/v3/direction/driving"

# 从环境变量中获取API密钥，如果未设置则使用默认值
# 请确保您已经设置了环境变量 'AMAP_API_KEY'
api_key = os.getenv('AMAP_API_KEY', "7eecaf8606c454d7dce4eac9ae699675")

# 确保API密钥被设置
if not api_key:
    raise ValueError("请设置环境变量 'AMAP_API_KEY' 为你的高德地图API密钥。")

# 读取Excel文件，确保文件路径正确
csv_file_path = r"C:\Users\45286\OneDrive\桌面\python+git实训资料\git pycharm\pythonProject\良友大厦方案距离汇总.xlsx"
# 读取所有工作表
# 假设您知道要读取的工作表名称为 'Sheet2'
df= pd.read_excel(csv_file_path, sheet_name='Sheet1')

# 起点坐标
origin = "114.273599,30.596733"

# 存储结果的列表
results = []

# 遍历DataFrame中的每一行
for index, row in df.iterrows():
    destination = row['destination']
    params = {
        "origin": origin,
        "destination": destination,
        "key": api_key,
        "strategy": 10,  # 时间优先策略
    }

    try:
        # 发送HTTP GET请求
        response = requests.get(api_url, params=params)
        response.raise_for_status()  # 如果响应状态码不是200，将抛出HTTPError异常

        # 解析响应内容
        data = response.json()
        print(f"数据已保 {data}")
        # print("数据：", {data})

        # 检查数据中是否包含路线信息
        if 'route' in data and 'paths' in data['route']:
            paths = data['route']['paths']

            # 从所有路线中找出距离最短的路线
            if paths:  # 确保paths列表不为空
                shortest_path = min(paths, key=lambda x: x.get('distance', 0))

                # 提取最短路线的详细信息
                shortest_distance = shortest_path.get('distance', '未知')
                steps = shortest_path.get('steps', [])

                # 存储结果
                results.append({
                    'destination': destination,
                    'shortest_distance': shortest_distance,
                    'path_count': len(paths),

                })
            else:
                print("没有找到路线信息。")
        else:
            print("数据中没有包含路线信息。")

    except requests.exceptions.HTTPError as http_err:
        print(f"HTTP错误（{http_err.response.status_code}）：{http_err}，目的地：{destination}")
    except requests.exceptions.RequestException as e:
        print(f"请求错误：{e}，目的地：{destination}")
    except Exception as e:
        print(f"处理行 {index} 时发生错误：{e}")

# 将结果转换为DataFrame
results_df = pd.DataFrame(results)

# 打印结果
print(results_df)

# 可选：将结果保存到CSV文件
output_csv_path = 'results2.csv'  # 可以指定一个文件路径
if not results_df.empty:
    results_df.to_csv(output_csv_path, index=False)
    print(f"结果已保存到 {output_csv_path}")
else:
    print("没有数据可以保存。")